#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# sysmetrics.py
#       
#  Copyright 2012 Ángel Coto <codiasw@gmail.com>
#  
#  This program is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
#  
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details (http://www.gnu.org/licenses/gpl.txt)
#  

# Descripción:
# Este programa realiza un monitoreo de los recursos de sistema
# a intervalos de 5 segundos y almacena los resultados en archivo texto
# con valores separados por tabs.

# Historial de la versión:
# 1.0.1: * Cambia el formato de la fecha en log a Y-m-d


import psutil, socket
from time import localtime, strftime, sleep
from sys import argv

### Define la versión del programa
Programa = 'sysmetrics'
Ver = '1.0.1 (beta)'
Copyright = 'Copyright (c) 2012 Ángel Coto <codiasw@gmail.com>'

def main():
	
	try:
	
		try:
			Modo = argv[1]
			if Modo <> 'a':
				Modo = 'w'
		except:
			Modo = 'w'
		
		print(Programa + '-' + Ver + '. ' + Copyright)
			
		Archivo = 'sysmetrics@' + socket.gethostname() + '.log'
		Log = open(Archivo,Modo)
		Log.write('Hora\t%Cpu\t%Memoria\tKb enviados\tKb recibidos\tKb Leídos\tKb Escritos\n')
		Log.close()
		BytesEnviados0 = 0
		BytesRecibidos0 = 0
		BytesLeidos0 = 0
		BytesEscritos0 = 0
		while True:
			Cpu = str(psutil.cpu_percent(interval=5))
			Memoria = str(psutil.virtual_memory()[2])
			
			BytesEnviados = psutil.network_io_counters()[0]/1024
			BytesRecibidos = psutil.network_io_counters()[1]/1024
			DifBytesRecibidos =  str(BytesRecibidos - BytesRecibidos0)
			DifBytesEnviados =  str(BytesEnviados - BytesEnviados0)
			BytesRecibidos0 = BytesRecibidos
			BytesEnviados0 = BytesEnviados
			
			BytesLeidos = psutil.disk_io_counters()[2]/1024
			BytesEscritos = psutil.disk_io_counters()[3]/1024
			DifBytesLeidos = str(BytesLeidos - BytesLeidos0)
			DifBytesEscritos = str(BytesEscritos - BytesEscritos0)
			BytesLeidos0 = BytesLeidos
			BytesEscritos0 = BytesEscritos
			
			Log = open(Archivo,'a')
			Linea = strftime("%Y-%m-%d %H:%M:%S", localtime()) + '\t'+ Cpu + '\t'\
							+ Memoria + '\t' + DifBytesEnviados + '\t' + DifBytesRecibidos + '\t'\
							+ DifBytesLeidos + '\t' + DifBytesEscritos +'\n'
			Log.write(Linea)
			Log.close()
		return 0
		
	except(KeyboardInterrupt, SystemExit):
		pass

if __name__ == '__main__':
	main()
else:
	main()
